package com.core.system.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pojo.entity.SystemUserEntity;
import com.pojo.dto.PageDto;
import com.pojo.dto.SystemUserDto;
import com.pojo.req.user.UserInsertReq;
import com.pojo.resp.user.UserImRecordResp;
import com.pojo.resp.user.UserPageResp;

import java.util.List;

/**
 * <p>
 * 系统用户表 服务类
 * </p>
 *
 * @author hewei
 * @since 2020-11-26
 */
public interface ISystemUserService extends IService<SystemUserEntity> {

    /**
     * 根据用户名获取用户信息
     * @param userName 用户名
     * @return
     */
    SystemUserEntity getUser(String userName);

    /**
     * 根据用户名获取用户信息
     * @param userId 用户名
     * @return
     */
    String getUserName(Long userId);

    /**
     * 查询在线用户集合
     */
    Page<UserImRecordResp> selectOnlineUserList(PageDto pageDto);


    /**
     * 用户信息分页查询
     * @param pageDto
     * @return
     */
    IPage<UserPageResp> selectUserListPage(PageDto pageDto);

    /**
     *   新增用户
     * @param userInsertReq
     * @return
     */
    int insertUser(UserInsertReq userInsertReq);

    /**
     *   修改用户
     * @param systemUserDto
     * @return
     */
    int updateUser(SystemUserDto systemUserDto);

    /**
     *   删除用户
     * @param systemUserDto
     * @return
     */
    void deleteUser(SystemUserDto systemUserDto);

    /**
     * 批量删除用户
     * @param systemUserDto
     * @return
     */
    int batchDeleteUser(SystemUserDto systemUserDto);

    /**
     * 修改用户状态
     * @param systemUserDto
     * @return
     */
    int updateUserStatus(SystemUserDto systemUserDto);

    /**
     * 修改密码
     * @param systemUserDto
     * @return
     */
    int passwordUpdate(SystemUserDto systemUserDto);

    /**
     * 查询用户信息
     * @return
     */
    SystemUserDto getUserDetails(Long id);



    /**
     * 查询用户信息
     * @return
     */
    SystemUserDto getCurrentDetails();

    /**
     * 退出登录用户状态
     * @param accessToken  认证token
     * @param userName  用户名
     * @return
     */
    int removeToken( String accessToken,String userName);

    /**
     * 据用户和菜单id 查询该用户该菜单的权限
     * @param templateId 菜单id
     * @return
     */
    List<String> selectUserPermission(Long templateId);


}
